//package com.krtech.wecard.module.pub.task;
//
//import cn.dev33.satoken.SaManager;
//import cn.hutool.core.bean.BeanUtil;
//import cn.hutool.core.util.StrUtil;
//import cn.hutool.json.JSONUtil;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.krtech.wecard.config.WecardRedisTemplate;
//import com.krtech.wecard.framework.exception.BusinessException;
//import com.krtech.wecard.module.pub.dto.ResultState;
//import com.krtech.wecard.module.pub.entity.TnNotify;
//import com.krtech.wecard.module.pub.entity.TnNotifyReback;
//import com.krtech.wecard.module.pub.service.TnNotifyRebackService;
//import com.krtech.wecard.module.pub.service.impl.TnNotifyServiceImpl;
//import com.krtech.wecard.module.sys.entity.SysKeyValue;
//import com.krtech.wecard.module.sys.entity.SysUser;
//import com.krtech.wecard.module.sys.enums.SysEnums;
//import com.krtech.wecard.module.sys.service.SysKeyValueService;
//import com.krtech.wecard.module.sys.service.SysUserService;
//import com.krtech.wecard.module.sys.service.impl.LoginServiceImpl;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * 定时消费redis中未成功发送的消息
// */
//@Component
//@Slf4j
//public class NotifyTask {
//
//    @Autowired
//    private SysKeyValueService keyValueService;
//
//    @Autowired
//    private TnNotifyServiceImpl tnNotifyService;
//
//    @Autowired
//    private WecardRedisTemplate redisTemplate;
//
//    @Autowired
//    private LoginServiceImpl loginService;
//
//    @Autowired
//    private SysUserService sysUserService;
//
//    @Autowired
//    private TnNotifyRebackService notifyRebackService;
//
//    @Autowired
//    private TnNotifyServiceImpl tnNotifyImplervice;
//
//
//    /**
//     * 定时每天，读取第三方给的url，然后,两台服务还要发两次
//     */
//    @Scheduled(cron = "0 0/2 * * * ?")
//    public void userTask(){
//        log.info("开始执行定时通知查询重新发送");
//        List<TnNotifyReback> list = notifyRebackService.list(new QueryWrapper<TnNotifyReback>().eq(TnNotifyReback.COL_STATUS, 0));
//
//        for (TnNotifyReback notifyReback:list){
//            if (StrUtil.isNotEmpty(notifyReback.getJsonBlock())){
//                TnNotify notifyVo = JSONUtil.toBean(notifyReback.getJsonBlock(), TnNotify.class);
//
//                ResultState templateMsgResultDto = tnNotifyImplervice.noticeTemplateByCode(notifyVo, notifyReback.getSendOpenId(), notifyVo.getNotifyTargetType());
//
//                if (!"ok".equals(templateMsgResultDto.getErrmsg())) {
//                    if (templateMsgResultDto.getErrcode() == 40001) {
//                        //access_toke过期
//                        loginService.deletePublicAccessToken();
//                    } else if (templateMsgResultDto.getErrcode() == 43004) {
//                        //用户未关注
//                        SysUser user = sysUserService.getOne(new QueryWrapper<SysUser>().eq(SysUser.COL_PUBLIC_OPEN_ID, notifyReback.getSendOpenId()));
//                        if (user != null) {
//                            user.setHasFocusPublicNumber(0);
//                            sysUserService.updateById(user);
//                        }
//
//                    }
//                }
//
//                //这儿就是成功了
//                notifyReback.setStatus(1);
//                notifyRebackService.updateById(notifyReback);
//            }
//
//        }
//    }
//}
